iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
1
Mobile Development

Android 開發經驗三十天系列 第 15

[Android 開發經驗三十天]D15一自定義小畫家(上) 基本介紹

  • 分享至 

  • xImage
  •  

嗨!今天來試著做一個小畫家吧
今日目標:做出畫畫的dataClass跟介紹Paint&&Path

先創一個class 讓他extends View

public class PPView extends View {...}

要畫畫這邊用到的是Paint可以想像是畫筆

Q:那畫筆可能要設定甚麼呢?
A1.像是 寬度 / 透明度 / 顏色 ..之類的 所以想創一個專門畫筆設定的class,

public class PaintValue {
    public PaintValue() {

    }

    public int getColor() {
        return color;
    }

    public void setColor(int color) {
        this.color = color;
    }

    public Float getPaintWidth() {
        return paintWidth;
    }

    public void setPaintWidth(Float paintWidth) {
        this.paintWidth = paintWidth;
    }

 

    private int color= Color.BLACK;
    private Float paintWidth=10f;
 

    public PaintValue(int color, Float paintWidth) {
        this.color = color;
        this.paintWidth = paintWidth;
      
    }
}

A2.或是畫筆畫過的地方跟步伐,這邊也創一個class專門放畫過哪
因為跟畫過路徑相關所以要extends Path
還有因為是路徑要考慮第一筆第二筆..等等,所以我會用list讓他可以一筆筆放入
參考:https://developer.android.com/reference/android/graphics/Path

public class DrawPath extends Path {
    private List<MovePath> pathLinkedList=new LinkedList<>();
    ...}

要override的方法
1.moveTo 筆從某一點移動到哪一點,不會有繪製的動作

 @Override
    public void moveTo(float x, float y) {
        pathLinkedList.add(new MovePath(x,y));
        super.moveTo(x, y);
    }

2.lineTo.
畫出從哪一點到哪一點的線,預設的話都是從 (0,0)開始

@Override
public void lineTo(float x, float y) {
    pathLinkedList.add(new MovePath(x,y));
    super.lineTo(x, y);
}

注:所以如果要畫 從10,10 到 50,50的線
可以先用move移動到 10,10 在用 lineto 50,50 畫出來

3.quadeTo
是畫出圓滑的曲線,因為正常畫畫不可能只畫直線所以需要這個

 @Override
    public void quadTo(float x1, float y1, float x2, float y2) {
        pathLinkedList.add(new MovePath(x1,y1,x2,y2));
        super.quadTo(x1, y1, x2, y2);
    }

4.MovePath只是一個dataClass,放 x,y ,moveX,moveY

public class MovePath {

    public MovePath(Float x, Float y) {
        this.x = x;
        this.y = y;
    }

    public Float getX() {
        return x;
    }

    public void setX(Float x) {
        this.x = x;
    }

    public Float getY() {
        return y;
    }

    public void setY(Float y) {
        this.y = y;
    }

    public MovePath(Float x, Float y, Float moveX, Float moveY) {
        this.x = x;
        this.y = y;
        this.moveX = moveX;
        this.moveY = moveY;
    }

    private Float x;
    private Float y;

    private Float moveX;
    private Float moveY;

}


上一篇
[Android 開發經驗三十天]D14一Spring Boot IOC
下一篇
[Android 開發經驗三十天]#D16一自定義View小畫家 (中)
系列文
Android 開發經驗三十天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言